using System;
using UnityEngine;

namespace model.entity
{
    [Serializable]
    public class GunData
    {
        // 枪械基础属性
        public string id;                      // 枪械唯一标识符(英文)
        public string name;                    // 枪械显示名称(中文)
        public string bulletType;              // 使用的子弹类型ID
    
        // 枪械性能参数
        public float fireRate;                 // 射击间隔时间(秒)，数值越小射速越快
        public int magazineSize;               // 弹夹容量(发)
        public float reloadTime;               // 装弹所需时间(秒)
        public float damage;                   // 基础伤害值
    
        // 枪械手感参数
        public float recoil;                   // 后坐力强度(0-1)，影响射击后准星偏移
        public float accuracy;                 // 精准度(0-1)，1为完全精准
        public float range;                    // 有效射程(游戏单位)
    
        // 资源路径
        public string spritePath;              // 枪械图片资源路径(Resources文件夹下的相对路径)
        public string soundPath;               // 射击音效资源路径
    
        // 运行时加载的资源(不序列化到JSON)
        [NonSerialized] public Sprite sprite;  // 加载后的枪械图片
        [NonSerialized] public AudioClip sound; // 加载后的射击音效
    
        /// <summary>
        /// 加载枪械所需的资源(图片和音效)
        /// </summary>
        public void LoadResources()
        {
            // 从Resources文件夹加载枪械图片
            // sprite = Resources.Load<Sprite>(spritePath);
            sprite = ABMgr.GetInstance().LoadAssetBundleSync<Sprite>("gun", spritePath);
        
            // 从Resources文件夹加载射击音效
            // sound = Resources.Load<AudioClip>(soundPath);
            sound = ABMgr.GetInstance().LoadAssetBundleSync<AudioClip>("music", soundPath);
            Debug.Log(sound);
            Debug.Log($"声音加载：{soundPath}");
            
            if (sound == null) {
                Debug.LogError("加载失败：AudioClip为Null");
            } else {
                Debug.Log($"音频信息: 长度={sound.length}, 频率={sound.frequency}, 声道={sound.channels}");
                // 如果长度=0或频率=0，说明文件损坏
            }
        
            // 可以在这里添加资源加载失败的日志记录
            if(sprite == null) Debug.LogWarning($"无法加载枪械图片: {spritePath}");
            if(sound == null) Debug.LogWarning($"无法加载音效: {soundPath}");
        }
    }
}